/**
 * Plugin dropdown menu
 * Coder: pyttop@gmail.com
 * Date: 12/11/2012
 * (tự động khởi tạo các phần tử ul.dropdown)
 * li có sub thì thêm class dropdown
 *
 * <ul class="dropdown">
 *     <li>Menu
 *         <ul>
 *             <li>Sub menu</li>
 *         </ul>
 *     </li>
 * <ul>
 *
 * Script: $("ul.dropdown").dropdown([options]);
 * Options:
 *  + inAction (default slideDown)
 *  + outAction (default slideUp)
 *  + inDuration (default 300)
 *  + outDuration (default 400)
 *
 */
(function ($) {
    "use strict";
    var cacheName = "dropdown",
        Dropdown = function (element, options) {
            // Nếu phần tử đang hiển thị là ifDislay thì thực hiện action
            var toggle = function (action, ifDisplay, duration) {
                return function () {
                    var self = this,
                        $ul = $("ul", this),
                        tracking = "do_ing_" + action;
                    if ($ul.css("display") === ifDisplay && !self[tracking]) {
                        self[tracking] = true;
                        if (ifDisplay === "none") {
                            $(self).addClass("current");
                        }
                        $ul[action](duration, function () {
                            self[tracking] = false;
                            if (ifDisplay === "block") {
                                $(self).removeClass("current");
                            }
                        });
                    }
                };
            }, $arrow = $('<span class="dropdown-arrow"></span>').html('&darr;').css({
                position: 'absolute',
                right: '3px',
                bottom: '3px',
                'font-sze': '18px'
            });

            options = $.extend({}, $.fn.dropdown.defaults, options);
            $("li", element).has("ul").addClass("dropdown");
            $("li.dropdown", element).hover(toggle(options.inAction, "none", options.inDuration),
                toggle(options.outAction, "block", options.outDuration))
                .append($arrow)
                .find("ul").hide();
        };

    $.fn.dropdown = function (options) {
        return $(this).each(function () {
            if (!$.data(this, cacheName)) {
                $.data(this, cacheName, new Dropdown(this, options));
            }
        });
    };

    $.fn.dropdown.defaults = {
        inAction: "slideDown",
        outAction: "slideUp",
        inDuration: 300,
        outDuration: 400
    };

    // Khởi tạo các phần có lớp dropdown
    $(function () {
        $("ul.dropdown").dropdown();
    });
}(window.jQuery));